#ifndef _MUSIC_GUI_H_
#define _MUSIC_GUI_H_

#include "lvgl.h"
#include <functional>

namespace MusicUI
{

#define LYRIC_SHOW_LINES 5

    typedef enum
    {
        PlayMode_ListLoop = 0, // 列表循环
        PlayMode_SingleLoop,   // 单曲循环
        PlayMode_Random,       // 随机播放
    } PlayMode;

    using ExitCb = std::function<void(void)>;
    using GetStateCb = std::function<int(void)>;
    using PauseCb = std::function<void(void)>;
    using PlayCb = std::function<void(const char *, int)>;
    using SetCurCb = std::function<void(int)>;
    using GetVolumeCb = std::function<void(int *, int *)>;
    using SetVolumeCb = std::function<void(int)>;
    using GetModeCb = std::function<PlayMode(void)>;
    using SetModeCb = std::function<void(PlayMode)>;

    struct Operations
    {
        ExitCb exitCb;
        GetStateCb getStateCb;   // 获取当前音乐状态回调函数
        PauseCb pauseCb;         // 当前音乐暂停回调函数
        PlayCb playCb;           // 音乐播放回调函数
        SetCurCb setCurCb;       // 音乐设置进度回调函数
        GetVolumeCb getVolumeCb; // 获取音乐音量回调函数
        SetVolumeCb setVolumeCb; // 设置音乐音量回调函数
        GetModeCb getModeCb;     // 获取当前播放模式回调函数
        SetModeCb setModeCb;     // 获取当前播放模式回调函数
    };

    void create(Operations &opts);
    void addMusicList(const char *name);
    void setPlayProgress(int cur, int total);
    void loadLyric(const char *lyric);
    void setLyricId(int id, bool anim);
    const char *getMusicName(int index);
    void showMusicName(const char *name);
    void release(void);

};

#endif
